package com.atguyigu.codesday01.Lock8Demo;

import java.io.InterruptedIOException;
import java.util.concurrent.TimeUnit;




                    /*5. 有两个静态同步方法，同一部手机，请问先打印邮件还是短信？
                 答    ------Email
                       -----SMS

                6 有两个静态同步方法，有2部手机，请问先打印邮件还是短信？
                           ------Email
                          -----SMS
                          类锁就是静态同步方法

                   总结 ：   类锁对应的关键字是static sychronized，是一个全局锁，
                   无论多少个对象否共享同一个锁（也可以锁定在该类的class上或者是classloader对象上），
                   同样是保障同一个时刻多个线程同时访问同一个synchronized块，当一个线程在访问时，
                   其他的线程等待。

     都换成静态同步方法后，情况又变化
   若是普通同步方法，new     this,   具体的一部部手机,所有的普通同步方法用的都是同一把锁——实例对象本身，
   若是静态同步方法，static  Class ，唯一的一个模板 *
  */


class Phone03 {
    public static synchronized void sendEmail() throws Exception {
        TimeUnit.SECONDS.sleep(4);
        System.out.println("------Email");
    }

    public static synchronized void sendSMS() throws Exception {
        System.out.println("-----SMS");

    }
    public void hello()
    {
        System.out.println("-----hello");
    }
}


public class Demo3 {

    public static void main(String[] args) throws InterruptedIOException, InterruptedException {

        Phone03 phonea=new Phone03();
        Phone03 phoneb=new Phone03();

        new Thread(() -> {
            try {
               phonea.sendEmail();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }, "t1").start();

       Thread.sleep(10);

        new Thread(() -> {
            try {
               // phonea.sendSMS ();
                phoneb.sendSMS();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }, "t2").start();
    }
}
